Technote 1123

Start Manager Extension Table Mechanism


ñ⁄éü

äÓëbäTîO

ÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsÇÃäƒéã

ÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsÇÃêßå‰

ÉäÉtÉ@ÉåÉìÉX - ã@î\ägí£ÉeÅ[ÉuÉãÉ}ÉlÅ[ÉWÉÉ

Ç‹ÇΔÇfl - ã@î\ägí£ÉeÅ[ÉuÉãÉ}ÉlÅ[ÉWÉÉ

ÉXÉ^Å[ÉgÉ}ÉlÅ[ÉWÉÉÇÕ Mac OS 8.1 Ç≈â¸í˘Ç≥ÇÍÅAÉVÉXÉeÉÄãNìÆéûÇ…ÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[ÉhÇÃäƒéãÇΔêßå‰ÇçsǧédëgÇ™í«â¡Ç≥ÇÍNjǵÇΩÅB

DZÇà TECHNOTE Ç≈ÇÕÅAÉXÉ^Å[ÉgÉ}ÉlÅ[ÉWÉÉÇÃïœçXì_ÇΔÉvÉçÉOÉâÉÄÇ™ÉVÉXÉeÉÄã@î\ägí£ÇÉçÅ[ÉhÇ∑ÇÈâflíˆÇäƒéãÇ‹ÇΩÇÕêßå‰Ç∑ÇÈï˚ñ@Çê‡ñæÇµÇ‹Ç∑ÅB


äÓëbäTîO

Mac OS 8.1 à»ëOÇÕÅAÉVÉXÉeÉÄã@î\ägí£ÇÕ 3 ǬÇÃÉtÉHÉãÉ_Ç©ÇÁèáÇ…ÉçÅ[Éh/é¿çsÇ≥ÇÍǃǢNjǵÇΩÅB3 ǬÇÃÉtÉHÉãÉ_ÇΔÇÕÅAã@î\ägí£ÉtÉHÉãÉ_ÅAÉRÉìÉgÉçÅ[ÉãÉpÉlÉãÉtÉHÉãÉ_ÅAÉVÉXÉeÉÄÉtÉHÉãÉ_Ç≈Ç∑ÅBäeÉtÉHÉãÉ_ì‡ÇÃÉVÉXÉeÉÄã@î\ägí£ÇÕÅAÉfÉBÉXÉNÇ…ãLò^Ç≥ÇÍǃǢÇÈèáèòÇ≈ÉçÅ[Éh/é¿çsÇ≥ÇÍǃǢNjǵÇΩÅBHFS É{ÉäÉÖÅ[ÉÄ (Mac OS ïWèÄå`éÆ) Ç≈ÇÕÅAÉAÉCÉeÉÄñºÇÕ ASCII ï∂éöÇ≈ï€ë∂Ç≥ÇÍÇÈÇΩÇflÅAÉAÉCÉeÉÄÇÕ RelString èáÇ…ÉJÉ^ÉçÉOÉtÉ@ÉCÉãÇ…ï€ë∂Ç≥ÇÍÇ‹Ç∑ÅBǬNjÇËÅARelString ä÷êîÇégǡǃÉ\Å[ÉgÇ≥ÇÍǃǢNjÇ∑ÅBÉtÉ@ÉCÉãÉ}ÉlÅ[ÉWÉÉÇà GetFInfo ÉãÅ[É`ÉìÇ™ RelString ÇÃèáÇ…ÉtÉ@ÉCÉãÇï‘Ç∑ÇÃÇÕDZÇÃÇΩÇflÇ≈Ç∑ÅB

Mac OS 8.1 Ç™ì±ì¸Ç≥ÇÍǃÅAêVǵǢÉuÅ[ÉgÉfÉBÉXÉNå`éÆÅAHFS Plus (Mac OS ägí£å`éÆ) Ç™ìoèÍǵNjǵÇΩÅBHFS Plus É{ÉäÉÖÅ[ÉÄÇ≈ÇÕÅAÉAÉCÉeÉÄñºÇÕ ASCII ï∂éöÇ≈ÇÕÇ»Ç≠ÅAÉÜÉjÉRÅ[Éhå`éÆÇ≈ï€ë∂Ç≥ÇÍÇÈÇΩÇflÅAHFS É{ÉäÉÖÅ[ÉÄÇΔÇÕà·Ç§èáèòÇ≈ÉJÉ^ÉçÉOÉtÉ@ÉCÉãÇ…ÉAÉCÉeÉÄÇ™ï€ë∂Ç≥ÇÍÇ‹Ç∑ÅBHFS Plus É{ÉäÉÖÅ[ÉÄÇ≈ÇÃÉ\Å[ÉgèáÇÃè⁄ç◊DžǬǢǃÇÕÅAHFS Plus É{ÉäÉÖÅ[ÉÄå`éÆÇ…ǬǢǃÇÃÉhÉLÉÖÉÅÉìÉgÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB

íçà”:
ÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕÅAÉtÉ@ÉCÉãÇ™É{ÉäÉÖÅ[ÉÄè„Ç≈àÍíËÇÃèáèòÇ…ï€ë∂Ç≥ÇÍÇÈDZÇΔÇdžǃDžǵǃÇÕÇ¢ÇØÇ‹ÇπÇÒÅBÉ{ÉäÉÖÅ[ÉÄå`éÆÇ™à·Ç¶ÇŒÉAÉCÉeÉÄÇÃÉ\Å[ÉgèáLJà·Ç§â¬î\ê´Ç™Ç†ÇËÅAëSÇ≠É\Å[ÉgÇ≥ÇÍǃǢǻǢèÍçáÇ≥ǶdžÇÈÇ©ÇÁÇ≈Ç∑ÅB


Roman ÉXÉNÉäÉvÉgÉVÉXÉeÉÄÇégópǵǃǢÇÈÉVÉXÉeÉÄÇ≈ÇÕÅAGetFInfo Ç™ï‘Ç∑ HFS Plus É{ÉäÉÖÅ[ÉÄÇÃÉtÉ@ÉCÉãÇÃèáèòÇÕ RelString ÇΔÇŸÇ⁄ìØÇ∂Ç≈Ç∑ (äÆëSÇ…ìØÇ∂Ç≈ÇÕdžÇËÇ‹ÇπÇÒ)ÅBǵǩǵÅAîÒ Roman ÉXÉNÉäÉvÉgÉVÉXÉeÉÄÇégópÇ∑ÇÈÉVÉXÉeÉÄÇ≈ÇÕÅAGetFInfo ÇÕëSÇ≠à·Ç¡ÇΩèáèòÇ≈ÉtÉ@ÉCÉãÇï‘Ç∑èÍçáǙdžÇËÇ‹Ç∑ÅB

íçà”:
ÉAÉbÉvÉãÉRÉìÉsÉÖÅ[É^ÇÕÅAÉVÉXÉeÉÄã@î\ägí£ÇÉçÅ[ÉhÇ∑ÇÈèáèòÇ…ÇÕàÀë∂ǵǻǢÇÊǧDžèÌÇ…åƒÇ—Ç©ÇØÇƒÇ´Ç‹ÇµÇΩÅBǵǩǵÅAé¿ç€Ç…ÇÕàÍíËÇÃèáèòÇ≈ÉçÅ[ÉhÇ∑ÇÈïKóvǙdžÇÈÉVÉXÉeÉÄã@î\ägí£Ç™ÇΩÇ≠Ç≥ÇÒdžÇËÇ‹Ç∑ÅB


ÉÜÅ[ÉUÇ™ç¨óêǵǻǢÇÊǧDžÅAÉ{ÉäÉÖÅ[ÉÄå`éÆÇ‚égópǵǃǢÇÈÉXÉNÉäÉvÉgÉVÉXÉeÉÄÇ…ä÷åWÇ»Ç≠ÅAÉVÉXÉeÉÄã@î\ägí£Ç™ïKÇ∏ìØÇ∂èáèòÇ≈ÉçÅ[Éh/é¿çsÇ≥ÇÍÇÈÇÊǧDžÇ∑ÇÈÇΩÇflÅAÉVÉXÉeÉÄã@î\ägí£ÇÃédëgÇ™ÅAÉeÅ[ÉuÉãÇégópÇ∑ÇÈÇÊǧDžâ¸í˘Ç≥ÇÍNjǵÇΩÅBÉXÉ^Å[ÉgÉ}ÉlÅ[ÉWÉÉÇÕÅAäeÉtÉHÉãÉ_ÇÃÉVÉXÉeÉÄã@î\ägí£Ç RelString Ç≈É\Å[Égǵǃ 1 â”èäÇ…î[ÇflÇΩÅAÉeÅ[ÉuÉãÇç\ízǵNjÇ∑ÅBǪǵǃÅAäeÉVÉXÉeÉÄã@î\ägí£ÇÕÉeÅ[ÉuÉãÇÃèáèòÇ≈ÉçÅ[Éh/é¿çsÇ≥ÇÍÇ‹Ç∑ÅBǪÇÃåãâ ÅAÉVÉXÉeÉÄǙǫÇÃå`éÆÇÃÉ{ÉäÉÖÅ[ÉÄÇ©ÇÁÉuÅ[ÉgÇ≥ÇÍǃLJÅAÇ«ÇÒÇ»ÉXÉNÉäÉvÉgÉVÉXÉeÉÄÇégópǵǃǢǃLJÅAèÌÇ…ìØÇ∂èáèòÇ≈ÉVÉXÉeÉÄã@î\ägí£Ç™ÉçÅ[Éh/é¿çsÇ≥ÇÍÇÈÇÃÇ≈Ç∑ÅB

ÉXÉ^Å[ÉgÉ}ÉlÅ[ÉWÉÉÇÕÅAëºÇÃÉvÉçÉOÉâÉÄÇ™ÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éhã@ç\Ç…ÉAÉNÉZÉXÇ≈Ç´ÇÈÇÊǧâ¸í˘Ç≥ÇÍNjǵÇΩÅBÉvÉçÉOÉâÉÄÇ≈ÅAÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsèàóùÇÃäƒéãÇ‹ÇΩÇÕêßå‰Ç™â¬î\Ç…Ç»ÇËNjǵÇΩÅB

äƒéãÇΔêßå‰

ÉvÉçÉOÉâÉÄÇÕ ExtensionNotificationProc ÇÉCÉìÉXÉgÅ[ÉãǵǃÅAÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[ÉhèàóùÇäƒéãÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBå¬ÅXÇà ExtensionNotificationProc Ç™åƒÇ—èoÇ≥ÇÍÇÈÇÃÇÕÅAç≈èâÇÃÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsëOÅAäeÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsÇÃëOå„óºï˚ÅAç≈å„ÇÃÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çså„Ç≈Ç∑ÅBã@î\ägí£í ímÉãÅ[É`ÉìÇ≈ÇÕÅAåƒÇ—èoǵÇÃç€Ç…ÅAÉAÉCÉRÉìÇÃï`âÊÅAÉTÉEÉìÉhÇÃçƒê∂ÅAÉVÉXÉeÉÄã@î\ägí£ñºÇÃï\é¶Ç»Ç«Ç≥NjǥNjǻèàóùÇçsǧDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBÉçÅ[ÉhíÜÇÃÉVÉXÉeÉÄã@î\ägí£ÇÃñºëOÇÉtÉ@ÉCÉãÇ…ï€ë∂ǵǃÅAÉNÉâÉbÉVÉÖÇ∑ÇÈÉVÉXÉeÉÄã@î\ägí£ÇÉfÉoÉbÉOǵǂÇ∑Ç≠Ç∑ÇÈDZÇΔÇ‚ÅAÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[ÉhèáÇãLò^Ç∑ÇÈDZÇΔLJÇ≈Ç´Ç‹Ç∑ÅBExtensionNotificationProc ÇÕÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsÇÃèáèòÇïœçXÇ∑ÇÈDZÇΔÇÕÇ≈Ç´Ç‹ÇπÇÒÅBExtensionNotificationProcs ÇÕÇ¢Ç≠ǬÇ≈LJÉCÉìÉXÉgÅ[ÉãÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB

ÉvÉçÉOÉâÉÄÇÕ ExtensionTableHandlerProc ÇÉCÉìÉXÉgÅ[ÉãǵǃÅAÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[ÉhèàóùÇêßå‰Ç∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBå¬ÅXÇà ExtensionNotificationProc Ç™åƒÇ—èoÇ≥ÇÍÇÈÇÃÇÕÅAç≈èâÇÃÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsëOÅAäeÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsÇÃëOå„óºï˚ÅAç≈å„ÇÃÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çså„Ç≈Ç∑ÅBExtensionNotificationProc ÇΔÇÕà·Ç¢ÅAExtensionTableHandlerProc Ç…ÇÕã@î\ägí£ÉeÅ[ÉuÉãÇÃèäóLå†Ç™ó^ǶÇÁÇÍÅAÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsÇÃèáèòÇäÆëSÇ…êßå‰Ç∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBExtensionTableHandlerProc ÇÉCÉìÉXÉgÅ[ÉãÇ∑ÇÈÉvÉçÉOÉâÉÄÇÕÅAì¡íËÇÃÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsÇã÷é~ǵÇΩÇËÅAÉfÉtÉHÉãÉgà»äOÇÃÉtÉHÉãÉ_Ç©ÇÁÉVÉXÉeÉÄã@î\ägí£ÇÉçÅ[ÉhÇ∑ÇÈDZÇΔLJÇ≈Ç´Ç‹Ç∑ÅBÉCÉìÉXÉgÅ[ÉãÇ≈Ç´ÇÈ ExtensionTableHandlerProc ÇÕ 1 Ç¬ÇæÇØÇ≈Ç∑ÅB

ExtensionTableHandlerProc Ç™ÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍǃǢǻǢÇΔÅAÉXÉ^Å[ÉgÉ}ÉlÅ[ÉWÉÉÇÕÉfÉtÉHÉãÉgÇÃã@î\ägí£ÉeÅ[ÉuÉãÉnÉìÉhÉâÇégópǵNjÇ∑ÅBDZÇÃÉfÉtÉHÉãÉgã@î\ägí£ÉeÅ[ÉuÉãÉnÉìÉhÉâÇÕëOÉoÅ[ÉWÉáÉìÇà Mac OS ÇÃÉtÉ@ÉCÉãÉ}ÉlÅ[ÉWÉÉÇÃÇÊǧǻìÆçÏÇǵNjÇ∑ (ó·Ç¶ÇŒÅAã@î\ägí£ÉeÅ[ÉuÉãÇÃç\ízÇ…égópǵÇΩÉtÉHÉãÉ_ÇÃì‡óeÇ™ïœÇÌÇÈÇΔÅAã@î\ägí£ÉeÅ[ÉuÉãÇçƒç\ízǵÅAdžÇΩǩLJǪDZÇ≈ÉXÉ^Å[ÉgÉ}ÉlÅ[ÉWÉÉÇ™ GetFInfo ÇåƒÇ—èoǵÇΩÇÊǧDžé¿çsÇ™çƒäJÇ≥ÇÍÇ‹Ç∑)ÅB

íçà”:
ExtensionNotificationProc ÇΔ ExtensionTableHandlerProc ÇÕãNìÆéûÇÃÇ«ÇÃéûì_Ç≈Ç≈LJÉCÉìÉXÉgÅ[ÉãÇ∑ÇÈDZÇΔÇ™Ç≈Ç´ÅAǪÇÍà»ç~ÉÅÉbÉZÅ[ÉWÇéÛÇØéÊÇËÇ‹Ç∑ÅBExtensionTableHandlerProc ÇÃèÍçáÇÕÅAÇ‹ÇæÉCÉìÉXÉgÅ[ÉãÇ™çœÇÒÇ≈ǢǻǢÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsÇêßå‰Ç∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB


ã@î\ägí£ÉeÅ[ÉuÉã

ã@î\ägí£ÉeÅ[ÉuÉãÇÕÉVÉXÉeÉÄÉqÅ[ÉvíÜÇÃçƒäÑÇËìñǃâ¬î\ÉuÉçÉbÉNÇ≈ÅAExtensionTable ç\ë¢ëÃÇ™ì¸Ç¡ÇƒÇ¢Ç‹Ç∑ÅBExtensionTable ÇÕÅAExtensionTableHeader ÇΔǪÇÍÇ…ë±Ç≠ ExtensionElements ÇÃîzóÒÇ≈ç\ê¨Ç≥ÇÍÇ‹Ç∑ÅBExtensionTableHeader Ç…ÇÕÅAExtensionTable Ç®ÇÊÇ— ExtensionElements ÉåÉRÅ[ÉhÇÃÉoÅ[ÉWÉáÉìÇï\Ç∑ÉtÉBÅ[ÉãÉhÅAåªç›ÉçÅ[Éh/é¿çsíÜÇÃÉVÉXÉeÉÄã@î\ägí£Ç…ëŒâûÇ∑ÇÈ ExtensionElements ÇÃÉCÉìÉfÉbÉNÉXÅAExtensionElements ÇÃÉTÉCÉYÅAÉeÅ[ÉuÉãíÜÇà ExtensionElements ÇÃå¬êîÇ™ä‹Ç‹ÇÍÇ‹Ç∑ÅBExtensionTable ÇÃäe ExtensionElements Ç…ÇÕÅAÉXÉ^Å[ÉgÉ}ÉlÅ[ÉWÉÉÇ…ÇÊǡǃÉçÅ[Éh/é¿çsÇ≥ÇÍÇÈÉVÉXÉeÉÄã@î\ägí£ÇéØï Ç∑ÇÈèÓïÒÇ™ì¸Ç¡ÇƒÇ¢Ç‹Ç∑ÅB

ÉCÉìÉXÉgÅ[ÉãçœÇ›ÇÃå¬ÅXÇà ExtensionNotificationProc Ç…ÇÕÅAåªç›ÉçÅ[Éh/é¿çsíÜÇÃÉVÉXÉeÉÄã@î\ägí£Ç…ëŒâûÇ∑ÇÈ ExtensionElements ÇÃÉRÉsÅ[Ç™ìnÇ≥ÇÍÇ‹Ç∑ÅB

ÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[ÉhèàóùÇêßå‰Ç∑ÇÈ ExtensionTableHandlerProc Ç…ÇÕÅAåƒÇ—èoǵÇÃìxÇ…ñàâÒ ExtensionTable Ç™ìnÇ≥ÇÍÇ‹Ç∑ÅBDZÇÃÉnÉìÉhÉâÇÕÅAExtensionTable ÇïœçXǵǃÅAÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[ÉhÇêßå‰ÇµÇ‹Ç∑ÅB

ÉuÅ[Égèàóù

ÉXÉ^Å[ÉgÉ}ÉlÅ[ÉWÉÉÇÕÅAÉuÅ[ÉgèàóùÇÃëÅÇ¢éûä˙Ç… (MacsBug ÇÃÉçÅ[Éhå„ÅAǵǩǵ MacsBug Çà dcmdSecondaryINIT éûÇÊÇËëO)ÅAExtensionTableHandlerProc ÇΔ ExtensionNotificationProc ÇÃÉCÉìÉXÉgÅ[ÉãÇΔçÌèúÇçsǧÇΩÇflÇà API ÇÉCÉìÉXÉgÅ[ÉãǵNjÇ∑ÅB

ÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsëOÇ…ÅAÉXÉ^Å[ÉgÉ}ÉlÅ[ÉWÉÉÇÕã@î\ägí£ÉeÅ[ÉuÉãÇçÏê¨ÇµÇ‹Ç∑ÅB

ç≈èâÇÃÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsëOÇ…ÅAExtensionTableHandlerProc ÇΔäe ExtensionNotificationProc ÇÕÅAÉVÉXÉeÉÄã@î\ägí£åQÇÃÉçÅ[ÉhèàóùÇÃäJénÇímÇÁÇπÇÈ extNotificationBeforeFirst ÉÅÉbÉZÅ[ÉWÇΔÇΔLJDžåƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅBextNotificationBeforeFirst ÉÅÉbÉZÅ[ÉWÇ≈åƒÇ—èoÇ≥ÇÍÇÈ ExtensionTableHandlerProc ÇÕÅAÇ«Çà ExtensionNotificationProc ÇÊÇËLJëOÇ…åƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅB

ǪÇÃå„ÅAÉXÉ^Å[ÉgÉ}ÉlÅ[ÉWÉÉÇÕã@î\ägí£ÉeÅ[ÉuÉãÇÃèáèòDžǵÇΩǙǡǃäeÉVÉXÉeÉÄã@î\ägí£ÇÉçÅ[Éh/é¿çsǵNjÇ∑ÅBǪÇÍǺÇÍÇÃÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsëOÇ…ÅAExtensionTableHandlerProc ÇΔÇ∑Ç◊ǃÇà ExtensionNotificationProc ÇÕÅAextNotificationBeforeCurrent ÉÅÉbÉZÅ[ÉWÇΔÇΔLJDžåƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅBäeÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çså„Ç…ÇÕÅAÇ∑Ç◊ǃÇà ExtensionNotificationProc ÇΔ ExtensionTableHandlerProc Ç™ extNotificationAfterCurrent ÉÅÉbÉZÅ[ÉWÇΔÇΔLJDžåƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅBextNotificationBeforeCurrent ÉÅÉbÉZÅ[ÉWÇ≈åƒÇ—èoÇ≥ÇÍÇÈ ExtensionTableHandlerProc ÇÕÅAÇ«Çà ExtensionNotificationProc ÇÊÇËLJëOÇ…åƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅBextNotificationAfterCurrent ÉÅÉbÉZÅ[ÉWÇ≈åƒÇ—èoÇ≥ÇÍÇÈ ExtensionTableHandlerProc ÇÕÅAÇ«Çà ExtensionNotificationProc ÇÊÇËLJå„Ç…åƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅB

Ç∑Ç◊ǃÇÃÉVÉXÉeÉÄã@î\ägí£Ç™ÉçÅ[ÉhÇ≥ÇÍÇΩå„ÅAÇ∑Ç◊ǃÇà ExtensionNotificationProc ÇΔ ExtensionTableHandlerProc Ç™ÅAÉVÉXÉeÉÄã@î\ägí£åQÇÃÉçÅ[ÉhèàóùÇÃäÆóπÇímÇÁÇπÇÈ extNotificationAfterLast ÉÅÉbÉZÅ[ÉWÇΔÇΔLJDžåƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅBextNotificationAfterLast ÉÅÉbÉZÅ[ÉWÇ≈åƒÇ—èoÇ≥ÇÍÇÈ ExtensionTableHandlerProc ÇÕÅAç≈å„Çà ExtensionNotificationProc ÇÃå„Ç…åƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅB

Ç¢Ç∏ÇÍÇÃèÍçáLJÅAExtensionNotificationProc ǫǧǵÇÃåƒÇ—èoǵÇÃëäëŒìIÇ»èáèòÇÕñ¢íËã`Ç≈Ç∑ÅB

ÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsÇÃäƒéã

INITÅAÇ‹ÇΩÇÕÉVÉXÉeÉÄã@î\ägí£Ç™ÉçÅ[ÉhÇ≥ÇÍÇÈëOÇ…é¿çsÇ≥ÇÍÇÈÉvÉçÉOÉâÉÄÇÕÅAInstallExtensionNotificationProc ÇåƒÇ—èoǵǃ ExtensionNotificationProc ÇÉCÉìÉXÉgÅ[ÉãÇ∑ÇÈDZÇΔÇ≈ÅAÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[ÉhèàóùÇäƒéãÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBDZÇÃÉnÉìÉhÉâÇÕÉCÉìÉXÉgÅ[Éãå„ÅAéüÇÃéûì_Ç≈åƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅB

* ç≈èâÇÃÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsëO (ÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsèàóùÇÃäJénëOÇ…ÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍÇΩèÍçá)
* äeÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsëO
* äeÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çså„
* ç≈å„ÇÃÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çså„

ExtensionNotificationProc ÇÕÅAåªç›ÉçÅ[ÉhíÜÇÃÉVÉXÉeÉÄã@î\ägí£Ç…ëŒâûÇ∑ÇÈ ExtensionElement ÇÃÉRÉsÅ[Ç÷ÇÃÉ|ÉCÉìÉ^ÅAExtensionElementPtr ÇéÛÇØéÊÇËÇ‹Ç∑ÅB

íçà”:
ExtensionElement ÇÃÉfÅ[É^ÇÕì«Ç›çûÇ›êÍópÇ≈Ç∑ÅBïœçXÇâ¡Ç¶ÇƒÇ‡ÅAExtensionElement ÇÃÉRÉsÅ[ÇïœçXǵǃǢÇÈÇ…Ç∑ǨNjÇπÇÒÅBExtensionNotificationProc ÇÃñflÇËÇ≈ïœçXÇÕîjä¸Ç≥ÇÍÇ‹Ç∑ÅB


ExtensionNotificationProc ÇÕÇ¢Ç≠ǬÇ≈LJÉCÉìÉXÉgÅ[ÉãÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB

ÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsÇÃêßå‰

INITÅAÇ‹ÇΩÇÕÉVÉXÉeÉÄã@î\ägí£Ç™ÉçÅ[ÉhÇ≥ÇÍÇÈëOÇ…é¿çsÇ≥ÇÍÇÈÉvÉçÉOÉâÉÄÇÕÅAInstallExtensionTableHandlerProc ÇåƒÇ—èoǵǃ ExtensionTableHandlerProc ÇÉCÉìÉXÉgÅ[ÉãÇ∑ÇÈDZÇΔÇ≈ÅAÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[ÉhèàóùÇÃêßå‰ÇçsǧDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBExtensionTableHandlerProc ÇÕÉXÉ^Å[ÉgÉ}ÉlÅ[ÉWÉÉÇ™çÏê¨ÇµÇΩÉfÉtÉHÉãÉgÇà ExtensionTable Çï‘ǵNjÇ∑ÅB

ÉCÉìÉXÉgÅ[Éãâ¬î\Ç» ExtensionTableHandlerProc ÇÕ 1 Ç¬ÇæÇØÇ≈Ç∑ÅB

ǢǡÇΩÇÒÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍÇΩÇÁÅAExtensionTableHandlerProc ÇÕÅAExtensionTable Ç…ëŒÇ∑ÇÈÇ∑Ç◊ǃÇÃïœçXÇçsǧê”îCǙdžÇËÇ‹Ç∑ÅBǵǩǵÅAå¬ÅXÇÃÉVÉXÉeÉÄã@î\ägí£ÇÉçÅ[ÉhÇ∑ÇÈä‘Ç… extElementIndex ÉtÉBÅ[ÉãÉhÇëùâ¡Ç≥ÇπÇÈDZÇΔÇæÇØÇÕïsóvÇ≈Ç∑ÅBExtensionTableHandlerProc ÇÃÉCÉìÉXÉgÅ[Éãå„ÇÕÅAÉVÉXÉeÉÄÇÃÉfÉtÉHÉãÉgã@î\ägí£ÉeÅ[ÉuÉãÉnÉìÉhÉâÇÕàÍêÿ ExtensionTable Çä«óùǵNjÇπÇÒÅB

ExtensionTableHandlerProc ÇÕÉCÉìÉXÉgÅ[Éãå„ÅAéüÇÃèÍçáÇ…åƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅB

* ç≈èâÇÃÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsëO (ÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsèàóùÇÃäJénëOÇ…ÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍÇΩèÍçá)
* äeÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsëO
* äeÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çså„
* ç≈å„ÇÃÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çså„

ExtensionTableHandlerProc ÇΔà·Ç¢ÅAExtensionTableHandlerProc ÇÕÅAÉXÉ^Å[ÉgÉ}ÉlÅ[ÉWÉÉÇ™égópÇ∑ÇÈÅAExtensionTable Ç÷ÇÃÉnÉìÉhÉãÇéÛÇØéÊÇËÇ‹Ç∑ÅBDZÇÍÇÕÉRÉsÅ[Ç≈ÇÕdžÇËÇ‹ÇπÇÒÅB

íçà”:
ÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍÇΩ ExtensionTableHandlerProc Ç™ ExtensionTable ÇïœçXÇ∑ÇÈÇ©ÅAExtensionTable Ç≈êßå‰Ç≥ÇÍǃǢÇÈÉtÉHÉãÉ_ÇÃì‡óeÇ™ïœçXÇ≥ÇÍÇÈÇΔÅAÉnÉìÉhÉâÇçÌèúÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç»Ç≠Ç»ÇËÇ‹Ç∑ÅBDZǧǵÇΩïœçXÇÃå„Ç≈ RemoveExtensionTableHandlerProc ÇåƒÇ—èoÇ∑ÇΔÅAparamErr ÉGÉâÅ[Ç™ï‘Ç≥ÇÍÇ‹Ç∑ÅB


ExtensionTable Çà extElementIndex ÉtÉBÅ[ÉãÉhÇÕÅAExtensionTableHandlerProc Ç™ extNotificationAfterCurrent ÉÅÉbÉZÅ[ÉWÇ≈åƒÇ—èoÇ≥ÇÍÇΩÇ∑ÇÆå„Ç…ÅAñàâÒéüÇà ExtensionElement ÇéwÇ∑ÇÊǧÉCÉìÉfÉbÉNÉXÇÃílÇ™çXêVÇ≥ÇÍÇ‹Ç∑ÅB

åxçê:
ÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[ÉhÇêßå‰ÇµÇƒÇ¢ÇÈèÍçáÅAExtensionElement ÇéwÇ∑ ExtensionTable.extElements[extElementIndex] ÇÃílÇïœçXÇ∑ÇÈà¿ëSÇ»É^ÉCÉ~ÉìÉOÇÕÅAExtensionTableHandlerProc Ç™ extNotificationAfterCurrent ÉÅÉbÉZÅ[ÉWÇ≈åƒÇ—èoÇ≥ÇÍÇÈÇΔÇ´ÇæÇØÇ≈Ç∑ÅBëºÇÃÉ^ÉCÉ~ÉìÉOÇ≈ ExtensionTable Ç‚ extElementIndex ÇïœçXǵǃLJǩNjǢNjÇπÇÒÇ™ÅAǪÇÃèÍçáÇÕÅAExtensionTable.extElements[extElementIndex] Ç™ìØÇ∂ ExtensionElement ÇéwÇ∑ÇÊǧíçà”ÇµÇ»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB

ÉäÉtÉ@ÉåÉìÉX - ã@î\ägí£ÉeÅ[ÉuÉãÉ}ÉlÅ[ÉWÉÉ

DZÇÃÉZÉNÉVÉáÉìÇ≈ÇÕÅAÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[ÉhèàóùÇΔé¿çsèàóùÇäƒéãÇ‹ÇΩÇÕêßå‰Ç∑ÇÈÇΩÇflÇ…égópÇ∑ÇÈÉeÉNÉjÉbÉNÇê‡ñæÇµÇ‹Ç∑ÅB

ã@î\ägí£ÉeÅ[ÉuÉãÇÃÉoÅ[ÉWÉáÉì (Gestalt)

ã@î\ägí£ÉeÅ[ÉuÉãã@ç\ÇóòópÇ∑ÇÈÉnÉìÉhÉâÇÉCÉìÉXÉgÅ[ÉãÇ∑ÇÈëOÇ…ÅAgestaltExtensionTableVersion ÉZÉåÉNÉ^Çégǡǃ Gestalt ÇåƒÇ—èoǵÅAåªç›ÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍǃǢÇÈ ExtensionTable ÇÃÉoÅ[ÉWÉáÉìÇí≤Ç◊Ç»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB

enum {
    gestaltExtensionTableVersion = FOUR_CHAR_CODE('etbl') /* ExtensionTable ÇÃÉoÅ[ÉWÉáÉì */
};


åªç› (Mac OS 8.1) Çà ExtensionTable ÇÃÉoÅ[ÉWÉáÉìÇÕ 1.0.0 Ç≈Ç∑ÅB

enum {
    kExtensionTableVersion = 0x00000100  /* ExtensionTable ÇÃåªçsÉoÅ[ÉWÉáÉì (1.0.0) */};


gestaltExtensionTableVersion Ç™ñ¢íËã`ÇæÇΔÅAã@î\ägí£ÉeÅ[ÉuÉãã@ç\Ç™ë∂ç›ÇπÇ∏ÅAä÷òAÇÃã@î\ägí£ÉeÅ[ÉuÉãÉãÅ[É`ÉìLJñ¢íËã`Ç≈džÇÈDZÇΔÇé¶ÇµÇ‹Ç∑ÅB

kExtensionTableVersion ÇΔÅAgestaltExtensionTableVersion Ç©ï‘Ç∑ílÇÃÉÅÉWÉÉÅ[ÉoÅ[ÉWÉáÉìî‘çÜÇ™àŸÇ»ÇÈèÍçáÅAǪÇÍÇÕã@î\ägí£ÉeÅ[ÉuÉãã@ç\Ç™ëÂïùÇ…ïœçXÇ≥ÇÍǃǢÇÈDZÇΔÇé¶ÇµÇƒÇ®ÇËÅAêVǵǢÉÅÉWÉÉÅ[ÉoÅ[ÉWÉáÉìÇîFímǵǻǢÉRÅ[ÉhÇ™ã@î\ägí£ÉeÅ[ÉuÉãã@ç\ÇóòópǵǃÇÕÇ»ÇËÇ‹ÇπÇÒÅB

kExtensionTableVersion ÇÃÉ}ÉCÉiÅ[ÉoÅ[ÉWÉáÉìî‘çÜÇ™ïœÇÌǡǃǢÇÈèÍçáÇÕÅAExtensionElement ç\ë¢ëÃÇÃíËã`ÇÕägí£Ç≥ÇÍǃǢÇÈÇ™ÅAǪÇÍà»ëOÇÃÉ}ÉCÉiÅ[ÉoÅ[ÉWÉáÉìÇà kExtensionTableVersion Ç≈íËã`Ç≥ÇÍÇΩÉtÉBÅ[ÉãÉhÇ…ÇÕïœçXǙǻǢDZÇΔÇé¶ÇµÇ‹Ç∑ÅB

ExtensionTable ç\ë¢ëÃ

ExtensionTable ÇÕÅAExtensionTableHeader ÇΔǪÇÍÇ…ë±Ç≠ ExtensionElements ÇÃîzóÒÇ≈Ç∑ÅBDZÇÃç\ë¢ëÃÇÕÅAÉuÅ[ÉgéûÇ…ÅAã@î\ägí£ÉeÅ[ÉuÉãã@ç\Ç™ÅAÉçÅ[Éh/é¿çsÇÃëŒè€ÇΔÇ»ÇÈÉVÉXÉeÉÄã@î\ägí£ÇÉXÉLÉÉÉìǵǃç\ízǵNjÇ∑ÅB

struct ExtensionTable {
    ExtensionTableHeader     extTableHeader; /* ExtensionTable ÇÃÉwÉbÉ_ */    ExtensionElement         extElements[1]; /* ÉçÅ[ÉhÇ∑ÇÈå¬ÅXÇÃã@î\ägí£Çï\Ç∑óvëf */};
typedef struct ExtensionTable    ExtensionTable;
typedef        ExtensionTable    * ExtensionTablePtr;
typedef        ExtensionTablePtr * ExtensionTableHandle;


ÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍÇΩ ExtensionTableHandlerProc Ç…ÇÕÅAåƒÇ—èoǵéûÇ…ÅAåªç›Çà ExtensionTable Çä‹Çfi ExtensionTableHandle Ç™ÉpÉâÉÅÅ[É^ÇΔǵǃìnÇ≥ÇÍÇ‹Ç∑ÅB

ExtensionTableHeader ç\ë¢ëÃ

ExtensionTable ÇÕ ExtensionTableHeader Ç≈énÇ‹ÇËÇ‹Ç∑ÅB

struct ExtensionTableHeader {
    UInt32    extTableHeaderSize;
    UInt32    extTableVersion;
    UInt32    extElementIndex;
    UInt32    extElementSize;
    UInt32    extElementCount;
};
typedef struct ExtensionTableHeader ExtensionTableHeader;

extTableHeaderSize ExtensionTableHeader ÇÃÉTÉCÉYÅBoffsetof(ExtensionTable,extElements[0]) Ç…ìôǵǢ
extTableVersion ExtensionTable ÇÃåªçsÉoÅ[ÉWÉáÉìÅBgestaltExtensionTableVersion Gestalt ÉZÉåÉNÉ^Ç™ï‘Ç∑ílÇΔìØÇ∂
extElementIndex ExtensionElement[] ÇÃåªç›ÇÃÉCÉìÉfÉbÉNÉX (ç≈èâÇÃóvëfÇÕÉ[Éç)ÅBäeÉVÉXÉeÉÄã@î\ägí£Ç™ÉçÅ[Éh/é¿çsÇ≥ÇÍÇΩå„Ç…ÉXÉ^Å[ÉgÉ}ÉlÅ[ÉWÉÉÇ…ÇÊǡǃëùÇ‚Ç≥ÇÍÇÈ
extElementSize DZÇÃÉoÅ[ÉWÉáÉìÇà ExtensionTable Çà ExtensionElements ÇÃÉTÉCÉY
extElementCount ExtensionTable ì‡Çà ExtensionElement ÉåÉRÅ[ÉhÇÃå¬êî


ExtensionTableHandlerProc ÇÕ extTableVersion ÉtÉBÅ[ÉãÉhÇÃÉ}ÉCÉiÅ[ÉoÅ[ÉWÉáÉìÇÉ`ÉFÉbÉNÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBExtensionTableHandlerProc Ç™èëÇ©ÇÍÇΩå„DžDZÇÍÇ™ïœçXÇ≥ÇÍǃǢÇÈÇΔÅAextElementSize ÇÃílÇ™ëÂÇ´Ç≠ǻǡǃǢÇÈǩLJǵÇÍÇ‹ÇπÇÒÅBExtensionTableHandlerProc Ç™ÉeÅ[ÉuÉãì‡ÇÃóvëfÇà⁄ìÆÇ‹ÇΩÇÕçÌèúÇ∑ÇÈÇæÇØÇÃLJÇÃÇ»ÇÁÅAé¿çsÇë±ÇØÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBǵǩǵÅAêVǵǢóvëfÇçÏê¨Ç∑ÇÈLJÇÃÇ≈džÇÈèÍçáÇÕÅAExtensionElements ÇÃêVǵǢÉtÉBÅ[ÉãÉhÇçÏê¨Ç∑ÇÈï˚ñ@Ç™ÇÌÇ©ÇÁǻǢÇΩÇflÅAExtensionTableHandlerProc ÇÕé©êgÇçÌèúÇµÇ»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB

DZÇÃç\ë¢ëÃÇÕÉXÉ^Å[ÉgÉ}ÉlÅ[ÉWÉÉì‡ïîÇ≈égópÇ≥ÇÍÅAÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍǃǢÇÈ ExtensionTableHandlerProc ÇÃåƒÇ—èoǵÇ≤ÇΔÇ…ìnÇ≥ÇÍÇ‹Ç∑ÅB

ExtensionElement ç\ë¢ëÃ

ExtensionElement ç\ë¢ëÃÇÕÅAÉXÉ^Å[ÉgÉ}ÉlÅ[ÉWÉÉÇ™ÉçÅ[Éh/é¿çsÇ∑ÇÈå¬ÅXÇÃÉVÉXÉeÉÄã@î\ägí£Ç…ǬǢǃÇÃèÓïÒÇäiî[Ç∑ÇÈÇΩÇflÇ…égópǵNjÇ∑ÅB

struct ExtensionElement {
    Str31               fileName;         /* ÉtÉ@ÉCÉãñº */    long                parentDirID;      /* ÉtÉ@ÉCÉãÇÃêeÉfÉBÉåÉNÉgÉäÇà ID */      /* DZDZǩÇÁÇÕ HParamBlockRec.fileParam ÉoÉäÉAÉìÉgÇà ioNamePtr à»ç~ÇÃLJÇÃÇ∑Ç◊ǃǙì¸ÇÈ */    short               ioVRefNum;        /* èÌÇ…é¿É{ÉäÉÖÅ[ÉÄéQèΔî‘çÜ */                                          /* (ÉfÉtÉHÉãÉgÇ≈ÇÕÉhÉâÉCÉuÇ≈ÇÕǻǢÅAÇ‹ÇΩÇÕçÏãΔíÜÇà dirID) */    short               ioFRefNum;
    SInt8               ioFVersNum;
    SInt8               filler1;
    short               ioFDirIndex;      /* ÉeÅ[ÉuÉãì‡Ç≈ÇÕèÌÇ… 0 */    SInt8               ioFlAttrib;
    SInt8               ioFlVersNum;
    FInfo               ioFlFndrInfo;
    long                ioDirID;
    unsigned short      ioFlStBlk;
    long                ioFlLgLen;
    long                ioFlPyLen;
    unsigned short      ioFlRStBlk;
    long                ioFlRLgLen;
    long                ioFlRPyLen;
    unsigned long       ioFlCrDat;
    unsigned long       ioFlMdDat;
};
typedef struct ExtensionElement         ExtensionElement;
typedef ExtensionElement *              ExtensionElementPtr;


ç≈èâÇà 2 ǬÇÃóvëfÇÕå¬ï ÇÃÉtÉ@ÉCÉãÇéØï ÇµÇ‹Ç∑ÅBécÇËÇÃóvëfÇÕ HParamBlockRec Çà fileParam ÉoÉäÉAÉìÉgÇ©ÇÁíºê⁄ÉRÉsÅ[Ç≥ÇÍÇ‹Ç∑ÅB

ExtensionElement ÇÕÅAÉXÉ^Å[ÉgÉ}ÉlÅ[ÉWÉÉÇ™ã@î\ägí£ÉtÉHÉãÉ_ÅAÉRÉìÉgÉçÅ[ÉãÉpÉlÉãÉtÉHÉãÉ_ÅAÉVÉXÉeÉÄÉtÉHÉãÉ_Ç≈å©Ç¬ÇØÇΩäeÉVÉXÉeÉÄã@î\ägí£Ç…ǬǢǃçÏê¨Ç≥ÇÍÇ‹Ç∑ÅBçÏê¨Ç≥ÇÍÇΩ ExtensionElement ÇÕ ExtensionTable Ç…Ç‹ÇΔÇflÇÁÇÍÇ‹Ç∑ÅB

ExtensionElementPtr ÇÕÅAÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍǃǢÇÈäe ExtensionNotificationProc ÇÃåƒÇ—èoǵÇ≤ÇΔÇ…ÅAÉpÉâÉÅÅ[É^ÇΔǵǃìnÇ≥ÇÍÇ‹Ç∑ÅBDZÇÍÇ™éwÇ∑ ExtensionElement Ç…ÇÕÅAåªç›ÉçÅ[Éh/é¿çsíÜÇÃÉVÉXÉeÉÄã@î\ägí£Ç…ëŒâûÇ∑ÇÈ ExtensionElement ÇÃÉRÉsÅ[Ç™ì¸ÇËÇ‹Ç∑ÅB

ã@î\ägí£í ímÉÅÉbÉZÅ[ÉWÉRÅ[Éh

ExtensionNotificationProc Ç‹ÇΩÇÕ ExtensionTableHandlerProc Ç…ÇÕåƒÇ—èoǵÇÃç€ÅAà»â∫ÇÃÉÅÉbÉZÅ[ÉWÉpÉâÉÅÅ[É^Ç™ìnÇ≥ÇÍÇ‹Ç∑ÅB

enum {
    extNotificationBeforeFirst   = 0, /* ÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[ÉhäJénëO */    extNotificationAfterLast     = 1, /* ëSÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[ÉhäÆóπå„ */    extNotificationBeforeCurrent = 2, /* extElementIndex Ç™é¶Ç∑ÉVÉXÉeÉÄ */                                      /* ã@î\ägí£ÇÃÉçÅ[ÉhëO */    extNotificationAfterCurrent  = 3  /* extElementIndex Ç™é¶Ç∑ÉVÉXÉeÉÄ */                                      /* ã@î\ägí£ÇÃÉçÅ[Éhå„ */};

ExtensionNotificationProc

pascal void MyExtensionNotificationProc( UInt32 message, void *reserved,
                                         ExtensionElementPtr extElement );

message ì¸óÕ 4 ǬÇà ExtensionNotification ÉÅÉbÉZÅ[ÉWÉRÅ[ÉhÇà 1 Ǭ
reserved è´óàÇÃÇΩÇfló\ñÒ
extElement ì¸óÕ åªç›ÉçÅ[Éh/é¿çsíÜÇÃÉVÉXÉeÉÄã@î\ägí£Çà ExtensionElement ÇÃÉRÉsÅ[

íçà”:
extElement ÇÕÅAextNotificationBeforeFirst ÇΔ extNotificationAfterLast ÉÅÉbÉZÅ[ÉWÇ≈ÇÕñ≥å¯Ç≈Ç∑ÅB


ExtensionNotificationProc ÇÕÅAåªç›ÉçÅ[ÉhíÜÇÃÉVÉXÉeÉÄã@î\ägí£Ç…ëŒâûÇ∑ÇÈ ExtensionElement ÇÃÉRÉsÅ[ÇéwÇ∑ ExtensionElementPtr ÇéÛÇØéÊÇËÇ‹Ç∑ÅB

íçà”:
ExtensionElement ÇÃÉfÅ[É^ÇÕïœçXÇ≈Ç´Ç‹ÇπÇÒÅBïœçXÇçsÇ¡ÇΩDžǵǃLJÅAExtensionElement ÇÃÉRÉsÅ[ÇïœçXǵǃǢÇÈÇ…Ç∑ǨNjÇπÇÒÅBExtensionNotificationProc ÇÃñflÇËÇ≈ïœçXÇÕîjä¸Ç≥ÇÍÇ‹Ç∑ÅB


ExtensionNotificationProc ÇÕÇ¢Ç≠ǬÇ≈LJÉCÉìÉXÉgÅ[ÉãÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB

íçà”:
ExtensionNotificationProc ÇÕ RemoveExtensionNotificationProc ÇåƒÇ—èoÇ∑DZÇΔÇÕÇ≈Ç´Ç‹ÇπÇÒÅBExtensionNotificationProc Ç™é©êgÇçÌèúÇ∑ÇÈïKóvǙdžÇÈèÍçáÇÕÅAó·Ç¶ÇŒÅANotification Manager É^ÉXÉNÇÉCÉìÉXÉgÅ[ÉãǵǃÅAå„Ç≈ǪÇÃÉ^ÉXÉNÇÃǻǩÇ≈ ExtensionNotificationProc ÇçÌèúÇ∑ÇÈǻǫÇÃï˚ñ@ÇéÊÇÁÇ»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB



ExtensionTableHandlerProc

pascal void MyExtensionTableHandlerProc( UInt32 message, void *reserved,
                                         ExtensionTableHandle extTableHandle );

message ì¸óÕ 4 ǬÇà ExtensionNotification ÉÅÉbÉZÅ[ÉWÉRÅ[ÉhÇà 1 Ǭ
reserved è´óàÇÃÇΩÇfló\ñÒ
extTableHandle ì¸óÕ ÉçÅ[Éhó\íËÇÃÇ∑Ç◊ǃÇÃÉVÉXÉeÉÄã@î\ägí£Çä‹Çfi

ExtensionTableHandlerProc ÇÕÅAãNìÆéûÇ…ÉXÉ^Å[ÉgÉ}ÉlÅ[ÉWÉÉÇ™çÏê¨ÇµÇΩ ExtensionTable Ç÷ÇÃÉnÉìÉhÉãÇéÛÇØéÊÇËÇ‹Ç∑ÅBExtensionTableHandlerProc Ç™ÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍÇÈÇΔÅAÉVÉXÉeÉÄÇÃÉfÉtÉHÉãÉgÉnÉìÉhÉâÇÕ ExtensionTable ÇÃä«óùÇǪÇÍà»è„çsǢNjÇπÇÒÅBExtensionTableHandlerProc ÇÕÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍǃǢÇÈä‘ÅAÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsÇÃä‘Ç… extElementIndex ÉtÉBÅ[ÉãÉhÇ™é©ìÆìIÇ…çXêVÇ≥ÇÍÇÈDZÇΔÇèúǢǃÇÕÅAExtensionTable Ç…ëŒÇ∑ÇÈÇ∑Ç◊ǃÇÃïœçXÇçsǧê”îCǙdžÇËÇ‹Ç∑ÅB

íçà”:
ExtensionTableHandlerProc ÇÃÉCÉìÉXÉgÅ[Éãå„Ç…ÅAExtensionTable Ç‹ÇΩÇÕǪÇÍÇ…ä‹Ç‹ÇÍÇÈÉtÉHÉãÉ_ÇÃì‡óeÇ™ïœçXÇ≥ÇÍÇΩèÍçáÅARemoveExtensionTableHandlerProc ÇåƒÇ—èoÇ∑DZÇΔÇÕÇ≈Ç´Ç‹ÇπÇÒÅB


extElementIndexÉtÉBÅ[ÉãÉhÇÕÅAExtensionTableHandlerProc Ç™ extNotificationAfterCurrent ÉÅÉbÉZÅ[ÉWÇ≈åƒÇ—èoÇ≥ÇÍÇΩÇ∑ÇÆå„Ç…ÅAñàâÒéüÇà ExtensionElement ÇéwÇ∑ÇÊǧÉCÉìÉfÉbÉNÉXÇÃílÇ™çXêVÇ≥ÇÍÇ‹Ç∑ÅB

åxçê:
ÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[ÉhÇêßå‰ÇµÇƒÇ¢ÇÈèÍçáÅAExtensionElement ÇéwÇ∑ ExtensionTable.extElements[extElementIndex] ÇÃílÇïœçXÇ∑ÇÈóBàÍà¿ëSÇ»éûì_ÇÕÅAExtensionTableHandlerProc Ç™ extNotificationAfterCurrent ÉÅÉbÉZÅ[ÉWÇ≈åƒÇ—èoÇ≥ÇÍÇÈÇΔÇ´Ç≈Ç∑ÅBëºÇÃéûì_Ç≈ ExtensionTable Ç‚ extElementIndex ÇïœçXǵǃLJǩNjǢNjÇπÇÒÇ™ÅAǪÇÃèÍçáÇÕÅAExtensionTable.extElements[extElementIndex] Ç™ìØÇ∂ ExtensionElement ÇéwÇ∑ÇÊǧíçà”ÇµÇ»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB


ÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍǃǢÇÈ ExtensionTableHandlerProc ÇÕèÌÇ…ÅAextNotificationBeforeFirst Ç®ÇÊÇ— extNotificationBeforeCurrent ÉÅÉbÉZÅ[ÉWÇ≈åƒÇ—èoÇ≥ÇÍÇÈç≈èâÇÃÉnÉìÉhÉâÇ≈Ç∑ÅBÇ‹ÇΩÅAExtensionTableHandlerProc ÇÕÅAextNotificationAfterLast Ç®ÇÊÇ— extNotificationAfterCurrent ÉÅÉbÉZÅ[ÉWÇ≈åƒÇ—èoÇ≥ÇÍÇÈç≈å„ÇÃÉnÉìÉhÉâÇ≈Ç∑ÅB

ÉCÉìÉXÉgÅ[ÉãÇ≈Ç´ÇÈ ExtensionTableHandlerProc ÇÕ 1 Ç¬ÇæÇØÇ≈Ç∑ÅB

InstallExtensionNotificationProc

OSErr InstallExtensionNotificationProc( ExtensionNotificationUPP extNotificationProc )

ÉpÉâÉÅÅ[É^:
extNotificationProc ì¸óÕ ÉCÉìÉXÉgÅ[ÉãÇ∑ÇÈ ExtensionNotificationUPP

åãâ :
noErr 0 ExtensionNotificationUPP ÇÕÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍNjǵÇΩ
paramErr -50 ExtensionNotificationUPP ÇÕÇ∑Ç≈Ç…ÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍǃǢNjÇ∑
memFullErr -108 ExtensionNotificationUPP ÇÉCÉìÉXÉgÅ[ÉãÇ≈Ç´ÇÈÉÅÉÇÉäǙdžÇËÇ‹ÇπÇÒ

ExtensionNotificationUPP ÇÉCÉìÉXÉgÅ[ÉãǵNjÇ∑ÅB

ï°êîÇà ExtensionNotificationProcs ÇÉCÉìÉXÉgÅ[ÉãÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB

RemoveExtensionNotificationProc

OSErr RemoveExtensionNotificationProc (ExtensionNotificationUPP
                                       extNotificationProc)

ÉpÉâÉÅÅ[É^:
extNotificationProc ì¸óÕ çÌèúÇ∑ÇÈ ExtensionNotificationUPP

åãâ :
noErr 0 ExtensionNotificationUPP Ç™çÌèúÇ≥ÇÍNjǵÇΩ
paramErr -50 ExtensionNotificationUPP Ç™å©Ç¬Ç©ÇÁǻǢǩÅARemoveExtensionNotificationProc Ç™ ExtensionNotificationProc ÇÃíÜÇ©ÇÁåƒÇ—èoÇ≥ÇÍNjǵÇΩ

ExtensionNotificationUPP ÇçÌèúǵNjÇ∑ÅB

íçà”:
ExtensionNotificationProcs ÇÕ RemoveExtensionNotificationProc ÇåƒÇ—èoÇ∑DZÇΔÇÕÇ≈Ç´Ç‹ÇπÇÒÅB


InstallExtensionTableHandlerProc

OSErr InstallExtensionTableHandlerProc( ExtensionTableHandlerUPP extMgrProc,
                                        ExtensionTableHandle * extTable)

ÉpÉâÉÅÅ[É^:
extMgrProc ì¸óÕ ÉCÉìÉXÉgÅ[ÉãÇ∑ÇÈ ExtensionTableHandlerUPP
extTable ì¸óÕ InstallExtensionTableHandlerProc Ç…åªç›Çà ExtensionTableHandle Çï‘ǵǃLJÇÁǧÇΩÇflÇà ExtensionTableHandle Ç÷ÇÃÉ|ÉCÉìÉ^ÅBÉnÉìÉhÉãÇÕåƒÇ—èoǵë§Ç™ï€éùÇ∑ÇÈñÛÇ≈ÇÕǻǢÇÃÇ≈ÅAîjä¸ÇµÇƒÇÕÇ¢ÇØÇ‹ÇπÇÒÅBÇΩÇæÇµÅAÉeÅ[ÉuÉãì‡Çà extElementIndexÅAextElementCountÅAExtensionElements ÇÕïœçXÇ≈Ç´Ç‹Ç∑ÅB

åãâ :
noErr 0 ExtensionTableHandlerUPP ÇÕÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍNjǵÇΩ
paramErr -50 ï Çà ExtensionTableHandlerUPP Ç™Ç∑Ç≈Ç…ÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍǃǢNjÇ∑
memFullErr -108 ExtensionTableHandlerUPP ÇÉCÉìÉXÉgÅ[ÉãÇ∑ÇÈÇæÇØÇÃÉÅÉÇÉäǙdžÇËÇ‹ÇπÇÒ

ExtensionTableHandlerUPP ÇÉCÉìÉXÉgÅ[ÉãǵNjÇ∑ÅB

ÉCÉìÉXÉgÅ[ÉãÇ≈Ç´ÇÈ ExtensionTableHandlerProc ÇÕ 1 Ç¬ÇæÇØÇ≈Ç∑ÅB

RemoveExtensionTableHandlerProc

OSErr RemoveExtensionTableHandlerProc( ExtensionTableHandlerUPP extMgrProc )

ÉpÉâÉÅÅ[É^:
extMgrProc input çÌèúÇ∑ÇÈ ExtensionTableHandlerUPP

åãâ :
noErr 0 ExtensionTableHandlerUPP Ç™çÌèúÇ≥ÇÍNjǵÇΩÅB
paramErr -50 ExtensionTableHandlerUPP ÇÕÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍǃǢǻǢǩÅAåªç›Çà ExtensionTable ÇÕÅAÉIÉäÉWÉiÉãÇà ExtensionTable Ç≈ÇÕdžÇËÇ‹ÇπÇÒÅB

ExtensionNotificationUPP ÇçÌèúǵNjÇ∑ÅBǪÇÃå„ÇÕÉfÉtÉHÉãÉgÇÃÉnÉìÉhÉâÇ…êßå‰Ç™ñflÇËÇ‹Ç∑ÅB
íçà”:
ExtensionTableHandlerProc ÇÃÉCÉìÉXÉgÅ[Éãå„Ç…ÅAExtensionTable Ç‹ÇΩÇÕǪÇÍÇ…ä‹Ç‹ÇÍÇÈÉtÉHÉãÉ_ÇÃì‡óeÇ™ïœçXÇ≥ÇÍÇΩèÍçáÅARemoveExtensionTableHandlerProc ÇåƒÇ—èoÇ∑DZÇΔÇÕÇ≈Ç´Ç‹ÇπÇÒÅB

Ç‹ÇΔÇfl - ã@î\ägí£ÉeÅ[ÉuÉãÉ}ÉlÅ[ÉWÉÉ

íçà”:
DZDZÇ≈íËã`Ç≥ÇÍÇΩLJÇÃÇÕÇ∑Ç◊ǃ Universal Interfaces 3.1 Ç…ì¸Ç¡ÇƒÇ¢Ç‹Ç∑ÅB


íËêî

enum {
    gestaltExtensionTableVersion = FOUR_CHAR_CODE('etbl')  /* ExtensionTable ÇÃÉoÅ[ÉWÉáÉì */};

enum {
    kExtensionTableVersion      = 0x00000100  /* ExtensionTable ÇÃåªçsÉoÅ[ÉWÉáÉì (1.0.0) */};

/* ExtensionNotification ÉÅÉbÉZÅ[ÉWÉRÅ[Éh */
enum {
    extNotificationBeforeFirst   = 0, /* ÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[ÉhäJénëO */    extNotificationAfterLast     = 1, /* ëSÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[ÉhäÆóπå„ */    extNotificationBeforeCurrent = 2, /* extElementIndex Ç™é¶Ç∑ÉVÉXÉeÉÄ */                                      /* ã@î\ägí£ÇÃÉçÅ[ÉhëO */    extNotificationAfterCurrent  = 3  /* extElementIndex Ç™é¶Ç∑ÉVÉXÉeÉÄ */                                      /* ã@î\ägí£ÇÃÉçÅ[Éhå„ */};


ÉfÅ[É^å^

struct ExtensionElement {
    Str31               fileName;         /* ÉtÉ@ÉCÉãñº */    long                parentDirID;      /* ÉtÉ@ÉCÉãÇÃêeÉfÉBÉåÉNÉgÉäÇà ID */                                          /* DZDZǩÇÁÇÕ HParamBlockRec.fileParam ÉoÉäÉAÉìÉgÇà */                                          /* ioNamePtr à»ç~ÇÃLJÇÃÇ∑Ç◊ǃǙì¸ÇÈ */    short               ioVRefNum;        /* èÌÇ…é¿É{ÉäÉÖÅ[ÉÄéQèΔî‘çÜ */                                          /* (ÉfÉtÉHÉãÉgÇ≈ÇÕÉhÉâÉCÉuÇ≈ÇÕǻǢÅAÇ‹ÇΩÇÕçÏãΔíÜÇà dirID) */
    short               ioFRefNum;
    SInt8               ioFVersNum;
    SInt8               filler1;
    short               ioFDirIndex;      /* ÉeÅ[ÉuÉãì‡Ç≈ÇÕèÌÇ… 0 */    SInt8               ioFlAttrib;
    SInt8               ioFlVersNum;
    FInfo               ioFlFndrInfo;
    long                ioDirID;
    unsigned short      ioFlStBlk;
    long                ioFlLgLen;
    long                ioFlPyLen;
    unsigned short      ioFlRStBlk;
    long                ioFlRLgLen;
    long                ioFlRPyLen;
    unsigned long       ioFlCrDat;
    unsigned long       ioFlMdDat;
};
typedef struct ExtensionElement         ExtensionElement;
typedef ExtensionElement *              ExtensionElementPtr;
struct ExtensionTableHeader {
    UInt32    extTableHeaderSize;    /* ExtensionTable ÇÃÉwÉbÉ_ÇÃÉTÉCÉY */                                     /* offsetof(ExtensionTable,extElements[0]) ÇΔìôǵǢ */    UInt32    extTableVersion;       /* ExtensionTable ÇÃåªçsÉoÅ[ÉWÉáÉì */                                     /* gestaltExtensionTableVersion Gestalt ÉZÉåÉNÉ^Ç™ï‘Ç∑ílÇΔìØÇ∂ */
    UInt32    extElementIndex;       /* ExtensionElement ÇÃåªç›ÇÃÉCÉìÉfÉbÉNÉX */                                     /* (ç≈èâÇÃóvëfÇÕÉ[Éç) */    UInt32    extElementSize;        /* ExtensionElement ÇÃÉTÉCÉY */    UInt32    extElementCount;       /* ÉeÅ[ÉuÉãíÜÇà ExtensionElement */                                     /* ÉåÉRÅ[ÉhÇÃå¬êî (1 Ç©ÇÁêîǶÇÈ) */};

typedef struct ExtensionTableHeader     ExtensionTableHeader;
struct ExtensionTable {
    ExtensionTableHeader   extTableHeader;          /* ExtensionTableHeader */    ExtensionElement       extElements[1];  /* ÉçÅ[ÉhÇ∑ÇÈå¬ÅXÇÃã@î\ägí£Çï\Ç∑óvëf */};
typedef struct ExtensionTable           ExtensionTable;
typedef ExtensionTable *                ExtensionTablePtr;
typedef ExtensionTablePtr *             ExtensionTableHandle;


ÉãÅ[É`Éì

OSErr   InstallExtensionNotificationProc( ExtensionNotificationUPP  extNotificationProc)
OSErr   RemoveExtensionNotificationProc( ExtensionNotificationUPP  extNotificationProc)

OSErr   InstallExtensionTableHandlerProc( ExtensionTableHandlerUPP  extMgrProc,
                                          ExtensionTableHandle *    extTable)

OSErr   RemoveExtensionTableHandlerProc( ExtensionTableHandlerUPP  extMgrProc )


åãâ ÉRÅ[Éh
noErr 0 ExtensionNotificationUPP ÇÃÉCÉìÉXÉgÅ[ÉãÇ‹ÇΩÇÕçÌèúÇ™ê¨å˜ÇµÇ‹ÇµÇΩÅB
paramErr -50 ÉpÉâÉÅÅ[É^Ç…ÉGÉâÅ[ǙdžÇËÉãÅ[É`ÉìÇÃé¿çsÇ™åpë±Ç≈Ç´Ç‹ÇπÇÒÅB
memFullErr -108 ExtensionNotificationUPP ÇÉCÉìÉXÉgÅ[ÉãÇ‹ÇΩÇÕçÌèúÇ∑ÇÈÇΩÇflÇÃÉÅÉÇÉäǙdžÇËÇ‹ÇπÇÒÅB